Fix the Builder launcher's broken layout and unstyled controls - #310
Merged
Conversation
The dialog's form was laid out as a single inline run: the Recipe label, its <select>, and the goal label all shared one line before the full-width <textarea> wrapped, and the panel stretched toward its 880px max as a result. Root cause: <Dialog>'s `className` lands on the PANEL (.overlay-dialog), never on the body, so `.builder-launch-dialog`'s column layout only ever spaced the header away from the body while .overlay-dialog-body stayed a plain block full of inline-level children. Scoped the layout to .overlay-dialog-body the way .settings-dialog / .help-dialog / .library-dialog already do, and pinned the dialog to a 540px width. The three budget inputs had no styling beyond `width: 110px`, so they rendered as default-white browser fields inside a dark dialog; the fieldsets and radios were likewise raw browser defaults. All controls now share one themed box (matching .settings-select's own treatment), the fieldsets match .settings-fieldset, and the radios get accent-color. Also, while in here: - The oversight radios are now whole-row targets with a title and a description rather than one flat sentence, and the chosen row is visibly marked. - The autopilot disclosure is a bordered callout instead of loose orange text - it is a real "this will act without asking" warning. - listRecipes has always returned each recipe's `description` and nothing ever rendered it, so the picker gave no clue what a recipe builds; the selected recipe's description now shows under the picker. - The start button spent its whole default state disabled while looking identical to enabled - it now dims. Adds tests for the selected-row marking and the recipe description. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Problem
The Builder dialog's form rendered as a single inline run: the Recipe label, its
<select>, and the goal label all shared one line before the full-width<textarea>wrapped, and the panel stretched toward its 880px max as a result.Root cause:
<Dialog>'sclassNamelands on the panel (.overlay-dialog), never on the body. So.builder-launch-dialog { display: flex; flex-direction: column }only ever spaced the header away from the body, while.overlay-dialog-bodystayed a plain block full of inline-level children.Separately, the three budget inputs had no styling beyond
width: 110px, so they rendered as default-white browser fields inside a dark dialog; the fieldsets and radios were likewise raw browser defaults.Change
.overlay-dialog-body, the way.settings-dialog/.help-dialog/.library-dialogalready do, and pinned the dialog to 540px..settings-select's existing treatment; fieldsets match.settings-fieldset; radios getaccent-color.listRecipeshas always returned each recipe'sdescriptionand nothing ever rendered it, so the picker gave no clue what a recipe builds. The selected recipe's description now shows under the picker.No behavior change to
builder/start: the same args, in the same order, with the same enable/disable rule.Test plan
BuilderLaunchDialog.test.tsx— 8 passed, including two new tests (selected-row marking; recipe description rendering). The 6 pre-existing tests were not modified.npx tsc --noEmit -p .— clean.npx eslint .— 0 errors.flex/column, the four fields sit at distinct offsets each at full width (previously three shared one row), and the number inputs computergb(32,32,32)with light text instead of default white.Note: the selected-row highlight could not be confirmed visually — the browser pane runs hidden here and does not recompute styles for dynamically toggled classes, so that state is covered by the new test instead.